#include <iostream>
using namespace std;

int main()
{
    volatile const int a = 2;
    int *pa = const_cast<int *>(&a);
    (*pa)++;
    cout << *pa << endl;
    cout << a << endl;
    return 0;
}

// void fun(A* pa)
// {
// 	//  向下转换：直接转换是不安全的
// 	// 如果pa是指向父类A对象，存在越界问题
// 	B* ptr = dynamic_cast<B*>(pa);
// 	if (ptr)
// 	{
// 		ptr->_a++;
// 		ptr->_b++;
// 	}
// 	else
// 	{
// 		cout << "转换失败" << endl;
// 	}
// }

// int main()
// {
// 	// 向下转换规则：父类对象不能转换成子类对象，但是父类指针和引用可以转换子类指针和引用
// 	B b1;
// 	int x = 0;
// 	A a;
// 	int y = 0;
// 	B b;
// 	fun(&a);
// 	fun(&b);

// 	return 0;
// }